﻿#include <type_traits> //提供了用于类型特征的模板类和模板函数
#include <sstream>
#include <string>
#include <iostream>
using namespace std;
// 目的：对任意基本数据类型的数据进行加法处理
template <class T>
std::string Tostring(T t)
{
  std::ostringstream osstream;
  osstream << t;
  return osstream.str();
}
template <typename T, typename U>
auto add(T t, U u)
{
  // 判断泛型T和U是否是string类型
  if constexpr (std::is_same<T, std::string>::value)
    return t + Tostring(u);
  if constexpr (std::is_same<U, std::string>::value)
    return Tostring(t) + u;
  if constexpr (std::is_arithmetic<T>::value && std::is_arithmetic<U>::value)
    return u + t;
}
int main()
{
  string zs = "zhangsan";
  int age = 23;
  auto res = add(zs, 23);
  cout << res << endl; // 输出zhangsan23
  int res02 = add(23, 23);
  cout << res02 << endl; // 输出46
  string str_res02 = to_string(res02);
  cout << str_res02 << endl;
  return 0;
}